%% Tinc-VPN-Daemon
%% Copyright © 2013, Dominik George <nik@naturalnet.de>
%% Licensed under Create Commons BY-SA 3.0 DE
%%-
%% Code samples (i.e., content of lstlisting environments) are published
%% under The MirOS Licence, as far as they are protectable.
%%-
%% OpenRheinRuhr is granted permission to relicense this work under any
%% compatible OSI-approved licence.

\documentclass{beamer}

\usepackage[ngerman]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}

\usepackage{listings}
\usepackage{color}
\usepackage{textcomp}
\definecolor{listinggray}{gray}{0.9}
\definecolor{lbcolor}{rgb}{0.9,0.9,0.9}
\lstset{
	backgroundcolor=\color{lbcolor},
	tabsize=4,
	rulecolor=,
	language=matlab,
        basicstyle=\scriptsize,
        upquote=true,
        aboveskip={1.5\baselineskip},
        columns=fixed,
        showstringspaces=false,
        extendedchars=true,
        breaklines=true,
        prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
        frame=single,
        showtabs=false,
        showspaces=false,
        showstringspaces=false,
        identifierstyle=\ttfamily,
        keywordstyle=\color[rgb]{0,0,1},
        commentstyle=\color[rgb]{0.133,0.545,0.133},
        stringstyle=\color[rgb]{0.627,0.126,0.941},
}
\lstset{literate=%
{Ö}{{\"O}}1
{Ä}{{\"A}}1
{Ü}{{\"U}}1
{ß}{{\ss}}2
{ü}{{\"u}}1
{ä}{{\"a}}1
{ö}{{\"o}}1
{_}{{\_}}1
}

\usetheme{Ilmenau}

\setbeamercovered{transparent}
\beamertemplatenavigationsymbolsempty
\setbeamertemplate{footline}[frame number]

\title{Tinc VPN-Daemon}
\subtitle{Alternative zu OpenVPN \& Co. für dezentrale Netze}
\author{Dominik George}
\institute{OpenRheinRuhr 2013, Oberhausen}
\date{\today}
\subject{Python}
\keywords{Python,Programmierung}
\titlegraphic{\includegraphics{tinc-logo}}

\begin{document}
 \section{Einleitung}
 \subsection{Begrüßung}

 \begin{frame}
  \titlepage
 \end{frame}

 \begin{frame}
  \begin{columns}
   \column{.5\textwidth}
   \begin{itemize}
    \item{Dominik George (Nik, Natureshadow)}
    \item{23 Jahre alt}
    \item{Student (Anglistik. Informatik, Elektrotechnik)}
    \item{Informatik-Projektlehrer an der Sekundarschule}
    \item{Organisation des Kinder- und Jugendprogramms der FrOSCon}
    \item{Routinemäßiger Konferenz-Besucher und -Mitmacher}
   \end{itemize}
   \column{.5\textwidth}
   \includegraphics[width=.95\textwidth]{foto}
  \end{columns}
 \end{frame}

 \begin{frame}
  \frametitle{Inhalt}
  \tableofcontents
 \end{frame}

 \subsection{VPN allgemein}

 \begin{frame}[<+->]
  \frametitle{Was ist VPN?}

  \begin{itemize}
   \item{Virtual Private Network}
   \item{Sichere Verbindungen über unsichere Netzwerke}
   \item{Meistens wird entweder IP oder Ethernet getunnelt}
   \item{Einsatzzwecke:
    \begin{itemize}
     \item{Authentifizierter Netzzugang zum LAN}
     \item{Sichere Route ins Internet}
     \item{Verbindung von LAN-Segmenten / Standorten}
    \end{itemize}
   }
  \end{itemize}
 \end{frame}

 \begin{frame}
  \frametitle{Einige bekannte VPN-Lösungen}

  \begin{itemize}
   \item{OpenVPN}
   \item{IPsec / L2TP}
   \item{PPTP / GRE}
   \item{Hamachi}
  \end{itemize}
 \end{frame}

 \section{Tinc}
 \subsection{Eigenschaften des Tinc VPN-Daemons}

 \begin{frame}[<+->]
  \frametitle{Kerneigenschaften von Tinc}

  \begin{itemize}
   \item{Frei und offen}
   \item{Verschlüsselung, Authentifikation und Kompression}
   \item{Mesh-Routing}
   \item{Leicht erweiterbar / skalierbar}
   \item{Switch- (Bridge) und Router-Modus (Layer 2 / 3)}
   \item{Portierbar}
  \end{itemize}
 \end{frame}

 \begin{frame}[<+->]
  \frametitle{Unterschiede zu klassischen VPN-Lösungen}

  \begin{itemize}
   \item{Kein zentraler Server notwendig}
   \item{Keine zentrale Schlüsselverwaltung notwendig}
   \item{Sehr einfache, kompakte Konfiguration}
  \end{itemize}
 \end{frame}

 \subsection{Einrichtung eines Beispiel-Netzes}

 \begin{frame}[<+->]
  \frametitle{Einrichtung eines Beispiel-Netzes}

  \begin{itemize}
   \item{Zweit-einfachstes Netzwerk aus 3 Hosts, mit einer Server-Rolle:
    \begin{itemize}
     \item{sun - Logischer Server}
     \item{pluto - Netzwerkknoten 1}
     \item{merkur - Netzwerkknoten 2}
    \end{itemize}
   }
   \item{IP-Adresse des Servers: 10.23.42.123}
   \item{IP-Netz des VPNs: 172.16.10.0/24}
   \item{VPN-Modus: Layer 2 (Ethernet)}
   \item{Netzwerkname: netz}
  \end{itemize}

  Wichtig: Die Rolle des Servers spielt für Tinc keine Rolle. Wir nutzen
  sie nur, um einen Host mit einer festen, bekannten Adresse zu haben.

  Wir gehen davon aus, dass die IP-Konfiguration der Interfaces schon
  erledigt ist und auf allen Hosts tinc installiert ist.
 \end{frame}

 \begin{frame}[fragile]
  \frametitle{Einrichtung auf sun}

  \begin{lstlisting}
# cat /etc/tinc/netz/tinc.conf
Mode = switch
Name = sun
Interface = tap0

# cat /etc/tinc/netz/hosts/sun
Address = 10.23.42.123
Subnet = 172.16.10.0/24
\end{lstlisting}
\end{frame}

 \begin{frame}[fragile]
  \frametitle{Einrichtung auf pluto}

  \begin{lstlisting}
# cat /etc/tinc/netz/tinc.conf
Mode = switch
Name = pluto
Interface = tap0
ConnectTo = sun

# cat /etc/tinc/netz/hosts/pluto
Subnet = 172.16.10.0/24
\end{lstlisting}
\end{frame}

 \begin{frame}[fragile]
  \frametitle{Einrichtung auf merkur}

  \begin{lstlisting}
# cat /etc/tinc/netz/tinc.conf
Mode = switch
Name = merkur
Interface = tap0
ConnectTo = sun

# cat /etc/tinc/netz/hosts/pluto
Subnet = 172.16.10.0/24
\end{lstlisting}
\end{frame}

 \begin{frame}[fragile]
  \frametitle{Erzeugung der Schlüssel}

  Auf allen Hosts:

  \begin{lstlisting}
# tinc -K -n netz
\end{lstlisting}

 Danach /etc/tinc/netz/hosts/* auf allen Hosts synchronisieren.
\end{frame}

 \begin{frame}
  \Large{Fertig!}
 \end{frame}

 \subsection{Mesh Routing und Erweiterbarkeit}

 \begin{frame}[<+->]
  \frametitle{Funktionalität des Beispiel-Netzes}

  \begin{itemize}
   \item{Volle Ethernet-Konnektivität}
   \item{Authentifikation, Verschlüsselung, Kompression}
   \item{Mesh-Routing und mehr}
  \end{itemize}
 \end{frame}

 \begin{frame}[<+->]
  \frametitle{Mesh-Routing und Erweiterung}

  \begin{itemize}
   \item{Neue Hosts hinzufügen ist sehr einfach}
   \item{Server-Verbindung (ConnectTo) ist nur ein vorgegebener, fixer Kontrollkanal}
   \item{Tinc findet automatisch die beste Route durch das eigene Netz von Knoten zu Knoten
    \begin{itemize}
     \item{Wenn öffentliche Adressen von mehreren Knoten bekannt sind, werden redundante
           Verbindungen aufgebaut und der beste Pfad ermittelt}
     \item{LocalDiscovery (optional) - Tinc ermittelt per (authentifiziertem) Broadcast,
           ob Knoten im selben darunterliegenden LAN erreichbar sind (Beispiel: Notebooks
           im selben WLAN) und baut dann automatisch direkte Verbindungen auf.}
    \end{itemize}
   }
  \end{itemize}
 \end{frame}

 \section{Ende}
 \subsection{Where to go from here...}

 \begin{frame}[<+->]
  \frametitle{Weitere Features, die interessant sind}

  \begin{itemize}
   \item{Einladungen - neue Hosts per E-Mail / URL mit einem Kommando ins VPN einladen}
   \item{Local Discovery - Hosts und Pfade im selben Lan finden}
   \item{Router-Mode (Layer 3)}
   \item{Tunnel-Server - traditionelles, zentralisiertes VPN}
   \item{Betrieb mit sslh (z.B. auf Port 443)}
   \item{Hook-Scripts (-up, -down, ...)}
  \end{itemize}
 \end{frame}

 \subsection{Dank}

 \begin{frame}
  Vielen Dank für eure Teilnahme!

  Für weitere Fragen, Anregungen, etc.:

  Website: \url{http://www.dominik-george.de}\\
  E-Mail / Jabber: nik@naturalnet.de

  Lizenz der Folien: CC-BY-SA 3.0
 \end{frame}
\end{document}
